<?php if (!defined('BASEPATH')) exit('No direct access allowed.');

class King {
private $isMng=0;//前后台判断默认0为前台
	
/* ------>>> 构造表单 <<<---------------------------- */
/**
	开始显示表单
	@param string $action  表单提交地址
	@param string $caption 表格名称
	@param int    $enctype 0：post类型，1：form-data类型 default：Ajax调用
	@return
*/

/* ------>>> 构造表单 <<<---------------------------- */
/**
	开始显示表单
	@param string $action  表单提交地址
	@param string $caption 表格名称
	@param int    $enctype 0：post类型，1：form-data类型 default：Ajax调用
	@return
*/
public function openForm($action=null,$caption=null,$enctype=0){

	$is='0';

	switch((string)$enctype){
	case '0':
		$s= empty($action) ? '<form>' : '<form name="k_formlist" method="post" id="k_formlist" action="'.$action.'">';
	break;

	case '1':
		$s='<form name="k_formlist" method="post" id="k_formlist" action="'.$action.'" enctype="multipart/form-data">';
	break;

	default:
		$s="<form id=\"$enctype\" name=\"$enctype\">";
	}


	if($is==1){//1代表的是table结构

		$s.=$caption? "<h3 class=\"caption\">$caption</h3>" : '';
		$s.='<table class="k_table_form" cellspacing="0">';
	}else{
		$s.=$caption ? "<h3 class=\"caption\">$caption</h3>" : '';
	}

	return $s;
}




public function htmForm($_label=null,$_htmlcode=null,$_arraycheck=null,$_tag=null,$_help=null){
	
	if('0'==1 && (!in_array($GLOBALS['action'],array('ajax','iframe'))) ){//1代表的是table结构
		$s='<tbody><tr>';
		if(!empty($_label)){
			$s.='<th>';
			preg_match_all ("/^([^\(]+)((\(.*\))?)$/",$_label,$_label_array, PREG_PATTERN_ORDER);//拆分标题和提示内容
			$s.=$_label_array[1][0];

			$s.='</th>';
		}else{
			$s.="<th>&nbsp;</th>";
		}
		$s.='<td>';

		$s_tag='';

		if($this->isMng){
			if($this->admin['adminmode']==2){
				if(isset($_tag{0})){
					$array=explode(',',$_tag);
					$s_tag.=' <var>';
					foreach($array as $val){

						list($prefix,$name)= (substr($val,0,7)=='config.') ? explode('.',$val,2) : array($val,'');

						/*
						if(substr($val,0,7)=='config.'){
							$kctag='{config:'.$name.'/}';
						}else{
							$kctag='{king:'.$val.'/}';
						}
*/
						$kctag=($prefix=='config')?'{config:'.$name.'/}':'{king:'.$val.'/}';
						$s_tag.='<i title="TAG标签:{king:'.$val.'/}" onClick="window.clipboardData.setData(\'Text\',\''.$kctag.'\');">'.$kctag.'</i>';
					}
					$s_tag.='</var>';
				}
			}
		}

		$s.='<table class="k_side" cellspacing="0"><tr><td>';
		$s.=$_htmlcode;

		if($_arraycheck)
			$s.=kc_check($_arraycheck);
		$s.='</td>';

		$s.=isset($_help{0})?"<td>{$_help}</td>":'';

		$s.=isset($s_tag{0})?"<td>{$s_tag}</td>":'';

		$s.='</tr></table>';

		$s.='</td></tr></tbody>';
	}else{

		$s=isset($_label{0})?'<div class="k_htm">':'<div class="k_htm_in">';

		if($_label)
			$s.='<label>'.$_label;

		if($this->isMng&&isset($_tag{0})){
			if($this->admin['adminmode']==2){
				$array=explode(',',$_tag);
				$s.=' <var>';
				foreach($array as $val){
					list($prefix,$name)=kc_explode('.',$val,2);
/*
					strtolower($prefix)=='config'
						? $kctag='{const:'.$name.'/}'
						: $kctag='{king:'.$val.'/}';
*/
					$kctag=($prefix=='config')?'{config:'.$name.'/}':'{king:'.$val.'/}';

					$s.='<i title="TAG标签:{king:'.$val.'/}" onClick="window.clipboardData.setData(\'Text\',\''.$kctag.'\');">'.$kctag.'</i>';
				}
				$s.='</var>';
			}
		}

		if($_label)
			$s.='</label>';

		$s.='<p>';

		if(isset($_help{0})){
//			$s.='<table class="k_side" cellspacing="0"><tr><td>';
			$s.=$_htmlcode;


//			$s.='</td><td>';
			$s.="<tt>{$_help}</tt>";

			if($_arraycheck)
				$s.=kc_check($_arraycheck);

//			$s.='</td></tr></table>';
		}else{
			$s.=$_htmlcode;
			if($_arraycheck)
				$s.=kc_check($_arraycheck);
		}

		$s.='</p></div>';

	}

	return $s;

}





/**
	拆分表单显示
	@param
	@return
*/
public function splitForm($caption=null){
	if($msg == '1'){//table结构
		$s='</table>'.($caption?"<h3 class=\"caption\">$caption</h3>":'').'<table class="k_table_form" cellspacing="0">';
	}else{
		$s=$caption ? "<h3 class=\"caption\">$caption</h3>" : '<p class="split"></p>';
	}
	return $s;
}


/**
	结束类
	@param string $submit 在结束类的同时，调用按钮
	@param int    $click  0:默认的submit ; onClick值
	@param string $exp    扩展
	@return string
*/
public function closeForm($submit=null,$click=null,$exp=null){


	$s=('0'==1) ? '</table>' : '';//1代表的是table结构

	$s.='<p class="k_submit">';

	if(empty($click)){
		if($submit==null){
			$submit='提交';
			$s.='<input type="submit" value="'.$submit.'[S]" class="big" accesskey="s"/>'.$exp;
		}elseif($submit=='save'){
			$submit='保存';
			$s.='<input type="submit" value="'.$submit.'[S]" class="big" accesskey="s"/>';
			if($this->isMng){//管理员的时候才显示其他内容
				$s.='<input type="reset" value="重置[R]" class="big" accesskey="r"/>';
				$s.='<input type="button" onclick="javascript:history.back(-1)" value="返回[B]" class="big" accesskey="b"/>'.$exp;
			}
		}elseif($submit=='none'){
			$s=('0'==1) ? '</table></form>' : '</form>';//1代表的是table结构
			return $s;
		}else{
			$s.='<input type="submit" value="'.$submit.'"  class="big" />'.$exp;
		}
	}else{
		$s.="<input type=\"button\" value=\"$submit\" class=\"big\" onClick=\"$click\" />".$exp;
	}

	$s.='</p>';
	$s.='</form>';

	return $s;
}







/**
	图像处理
	@param string $s       图片路径
	@param array  $attrib  图片属性
		需要有width和height属性
		外加一些滤镜
	@return string 返回缩略图地址
*/
function kc_image($s,$attrib){

	global $king;
	if((kc_validate($s,6) || substr($s,0,1)=='/')){
	return	$s;
	}else{
	$s='/browse/'.$s;
	}
	$width=kc_val($attrib,'width');
	$height=kc_val($attrib,'height');
	$position=kc_val($attrib,'position');

	if(!is_file(ROOT.$s))//确定文件存在
		return $s;
	list($_width, $_height)=getimagesize(ROOT.$s);

	if($_width && $_height){
		$width=kc_validate($width,2)?$width:120;
		$height=kc_validate($height,2)?$height:90;
	}else{
		return $s;
	}

	$newdir=dirname($s)."/thumb_{$width}x{$height}";//新目录
	$newimg=$newdir.'/'.basename($s);//新文件

/**/
	//如果缩略图文件存在，则直接返回缩略图文件地址
	if(is_file(ROOT.$newimg)){
		return $king->config('inst').$newimg;
	}
/**
 * 如果加入截图位置的话，
 * location=top,left,right,bottom,topleft,topright,leftbottom,rightbottom,
 */
	if($_width/$_height>=$width/$height){
		$w=round(($_width/$_height)*$height);
		$h=$height;
		$x=round(($width-$w)/2);
		$y=0;
	}else{
		$w=$width;
		$h=round(($_height/$_width)*$width);
		$x=0;
		$y=round(($height-$h)/2);
	}

	switch ($position){
		case 'top':$y=0;break;
		case 'left':$x=0;break;
		case 'right':$x=$x*2;break;
		case 'bottom':$y=$y*2;break;

		case 'lefttop':$x=0;$y=0;break;
		case 'topleft':$x=0;$y=0;break;

		case 'righttop':$x=$x*2;$y=0;break;
		case 'topright':$x=$x*2;$y=0;break;

		case 'leftbottom':$x=0;$y=$y*2;break;
		case 'bottomleft':$x=0;$y=$y*2;break;

		case 'rightbottom':$x=$x*2;$y=$y*2;break;
		case 'bottomright':$x=$x*2;$y=$y*2;break;

		default:
			if (kc_validate($position,'/^\-?\d+\,\-?\d+$/')){
				list($x,$y)=explode(',',$position);
			}

	}

	$ext=kc_f_ext($s);

	if(in_array(strtolower($ext),array('jpg','jpeg','gif','png'))){
		$fext=$ext=='jpg'?'jpeg':strtolower($ext);
	}else{
		return $s;
	}

	$func='imagecreatefrom'.$fext;
	$source=$func(ROOT.$s);
	$im=imagecreatetruecolor($width, $height);

	//拷贝图像新建
	imagecopyresampled($im,$source,$x,$y,0,0,$w,$h,$_width,$_height);

	//重设长宽，减1是位置像素问题
	$w1=$width-1;
	$h1=$height-1;

	//置空
	$empty=kc_val($attrib,'empty');
	if(isset($empty{0})){

		$c1=kc_validate(kc_val($attrib,'empty-color'),13)?$attrib['empty-color']:'FFFFFF';//颜色
		$s1=kc_validate(kc_val($attrib,'empty-size'),2)?$attrib['empty-size']:0;//边框的厚度
		$r1=kc_validate(kc_val($attrib,'empty-r'),2)?$attrib['empty-r']:5;//圆角(半径)
		$empty_filter=kc_val($attrib,'empty-filter');//滤镜
		$empty_filter_color=kc_validate(kc_val($attrib,'empty-filter-color'),13) ? $attrib['empty-filter-color'] : '#666666';//颜色

		$color=kc_hex2rgb($im,$c1);//转换颜色

		for($i=0;$i<$s1;$i++){
			imagerectangle($im,$i,$i,$w1-$i,$h1-$i,$color);//方框填充
		}

		switch(strtolower($empty)){
			case 'rectangle'://矩形

				//滤镜
				switch(strtolower($empty_filter)){
					case 'shadow':
						for($i=0;$i<$s1;$i++){
							$color=kc_hex2rgb($im,$empty_filter_color,(1-$i/$s1)*100);
							imageline($im,$s1+$i,$h1-$s1+$i,$w1-$s1+$i,$h1-$s1+$i,$color);
							imageline($im,$w1-$s1+$i,$s1+$i,$w1-$s1+$i,$h1-$s1+$i,$color);
						}
					break;
				}

			break;

			case 'fillet'://圆角矩形
				$d1=$s1+$r1-1;//位置

				for($i=0;$i<$r1+$s1;$i++){
					//画ARC
					$r=($r1+$i)*2-1;
					imagearc($im, $d1,    $d1,    $r,$r, 180,270,$color);//左上
					imagearc($im, $w1-$d1,$d1,    $r,$r, 270,360,$color);//右上
					imagearc($im, $w1-$d1,$h1-$d1,$r,$r,   0, 90,$color);//右下
					imagearc($im, $d1,    $h1-$d1,$r,$r,  90,180,$color);//左下
				}

				//滤镜
				switch(strtolower($empty_filter)){
					case 'shadow':
						for($i=0;$i<$s1;$i++){
							$r=($r1+$i)*2-1;
							$color=kc_hex2rgb($im,$empty_filter_color,(1-$i/$s1)*100);
							imageline($im,$d1+$i,$h1-$s1+$i,$w1-$d1,$h1-$s1+$i,$color);
							imageline($im,$w1-$s1+$i,$d1+$i+1,$w1-$s1+$i,$h1-$d1,$color);
							imagearc($im, $w1-$d1,$h1-$d1,$r,$r,   0, 90,$color);//右下

						}
					break;
				}

			break;

			case 'chamfer'://斜切矩形
				$d1=$s1+$r1-1;//位置

				for($i=0;$i<$r1;$i++){
					imageline($im,$w1-$d1+$i,$s1,$w1-$s1,$d1-$i,$color);//右上
					imageline($im,$w1-$s1,$h1-$d1+$i,$w1-$d1+$i,$h1-$s1,$color);//右下
					imageline($im,$d1-$i,    $h1-$s1,$s1,    $h1-$d1+$i,$color);//左下
					imageline($im,$s1,    $d1-$i,$d1-$i,    $s1,$color);//左上
				}

				//滤镜
				switch(strtolower($empty_filter)){
					case 'shadow':
						for($i=0;$i<$s1;$i++){
							$r=($r1+$i)*2-1;
							$color=kc_hex2rgb($im,$empty_filter_color,(1-$i/$s1)*100);
							imageline($im,$d1+$i+1,$h1-$s1+$i,$w1-$d1,$h1-$s1+$i,$color);
							imageline($im,$w1-$s1+$i,$d1+$i+1,$w1-$s1+$i,$h1-$d1,$color);
							imageline($im,$w1-$s1+$i,$h1-$d1,$w1-$d1,$h1-$s1+$i,$color);//右下

						}
					break;
				}

			break;

		}
	}

	//border
	$border=kc_val($attrib,'border');
	if(isset($border{0})){

		$c1=kc_validate(kc_val($attrib,'border-color'),13)?$attrib['border-color']:'000000';//颜色
		$m1=kc_validate(kc_val($attrib,'border-margin'),2)?$attrib['border-margin']:0;//移位
		$r1=kc_validate(kc_val($attrib,'border-r'),2)?$attrib['border-r']:5;//圆角(半径)
		$s1=kc_validate(kc_val($attrib,'border-size'),2)?$attrib['border-size']:1;//宽度

		$color=kc_hex2rgb($im,$c1);//转换颜色

		switch(strtolower($border)){
			case 'rectangle':
				for($i=0;$i<$s1;$i++){//边框要一层层加
					imagerectangle($im,$i+$m1,$i+$m1,$w1-$i-$m1,$h1-$i-$m1,$color);
				}
			break;

			case 'fillet'://圆角矩形

				$d1=$m1+$r1;//设置距离
				for($i=0;$i<$s1;$i++){//边框要一层层加
					$d=$r1*2-$i*2;//直径
					//画线
					imageline($im,$d1,    $m1+$i,    $w1-$d1,$m1+$i,    $color);//上
					imageline($im,$w1-$m1-$i,$d1,    $w1-$m1-$i,$h1-$d1,$color);//右
					imageline($im,$d1,    $h1-$m1-$i,$w1-$d1,$h1-$m1-$i,$color);//下
					imageline($im,$m1+$i,    $d1,    $m1+$i,    $h1-$d1,$color);//左
					//画ARC
					imagearc($im,$d1,    $d1,    $d,$d,180,270,$color);//左上
					imagearc($im,$w1-$d1,$d1,    $d,$d,270,360,$color);//右上
					imagearc($im,$w1-$d1,$h1-$d1,$d,$d,  0, 90,$color);//右下
					imagearc($im,$d1,    $h1-$d1,$d,$d, 90,180,$color);//左下
				}
			break;

			case 'chamfer'://斜切矩形
				$d1=$m1+$r1-1;//设置距离
				for($i=0;$i<$s1;$i++){//边框要一层层加
					$d=$r1*2-$i*2;//直径
					//画线
					imageline($im,$d1,    $m1+$i,    $w1-$d1,$m1+$i,    $color);//上
					imageline($im,$w1-$m1-$i,$d1,    $w1-$m1-$i,$h1-$d1,$color);//右
					imageline($im,$d1,    $h1-$m1-$i,$w1-$d1,$h1-$m1-$i,$color);//下
					imageline($im,$m1+$i,    $d1,    $m1+$i,    $h1-$d1,$color);//左
				}
				$s2=ceil(sqrt(2)*$s1);
				for($i=0;$i<$s2;$i++){//边框要一层层加
					imageline($im,$w1-$d1-$i,$m1,$w1-$m1,$d1+$i,$color);//右上
					imageline($im,$w1-$m1,$h1-$d1-$i,$w1-$d1-$i,$h1-$m1,$color);//右下
					imageline($im,$d1+$i,    $h1-$m1,$m1,    $h1-$d1-$i,$color);//左下
					imageline($im,$m1,    $d1+$i,$d1+$i,    $m1,$color);//左上
				}
			break;
		}
	}

	//水印
	$watermark=kc_val($attrib,'watermark');
	if(isset($watermark{0})){
		//先判断文件是否存在
		if(is_file(ROOT.$watermark)){
			list($_width_water,$_height_water)=getimagesize(ROOT.$watermark);

			if(kc_validate($_width_water,2)&&kc_validate($_height_water,2)){

				$wx=kc_validate(kc_val($attrib,'watermark-x'),2)?$attrib['watermark-x']:10;
				$wy=kc_validate(kc_val($attrib,'watermark-y'),2)?$attrib['watermark-y']:10;
				$pct=kc_validate(kc_val($attrib,'watermark-opacity'),2)?$attrib['watermark-opacity']:100;
				$water_color=kc_val($attrib,'watermark-color') ? $attrib['watermark-color']:'FFFFFF';//透明色

				$ext_water=kc_f_ext($watermark);

				if(in_array(strtolower($ext_water),array('jpg','jpeg','gif','png'))){
					$fext_water=$ext_water=='jpg'?'jpeg':strtolower($ext_water);
				}

				$func_water='imagecreatefrom'.$fext_water;
				$water=$func_water(ROOT.$watermark);//装载水印图片

				$color=kc_hex2rgb($water,$water_color);//转换颜色
				imagecolortransparent($water,$color);
				imagecopymerge($im,$water,$wx,$wy,0,0,$_width_water,$_height_water,$pct); // 左上

			}
		}
	}

	//插入字体
	$text=kc_val($attrib,'text');
	if(isset($text{0})){
		$tx=kc_validate(kc_val($attrib,'text-x'),2)?$attrib['text-x']:10;
		$ty=kc_validate(kc_val($attrib,'text-y'),2)?$attrib['text-y']:20;
		$s1=kc_validate(kc_val($attrib,'text-size'),2)?$attrib['text-size']:12;
		$a1=kc_validate(kc_val($attrib,'text-angle'),2)?$attrib['text-angle']:0;
		$f1=is_file(ROOT.kc_val($attrib,'text-font'))?$attrib['text-font']:'system/verify_font/MilkCocoa.TTF';
		$c1=kc_validate(kc_val($attrib,'text-color'),13)?$attrib['text-color']:'000000';//颜色

		$color=kc_hex2rgb($im,$c1);//转换颜色

		imagettftext($im,$s1,$a1, $tx,$ty,$color,ROOT.$f1,$text);

	}

	//开启抗锯齿
	imageantialias($im,True);

	$func='image'.$fext;
	kc_f_md($newdir);//创建目录

	if($func($im,ROOT.$newimg)){//保存缩略图
		$s=$newimg;
	}

	return $king->config('inst').$s;
}







}



















?>
